// 题目描述
// 187. 重复的DNA序列
// 中等
// 496
// DNA序列 由一系列核苷酸组成，缩写为 'A', 'C', 'G' 和 'T'.。
// 例如，"ACGAATTCCG" 是一个 DNA序列 。
// 在研究 DNA 时，识别 DNA 中的重复序列非常有用。
// 给定一个表示 DNA序列 的字符串 s ，返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。
//   示例 1：
// 输入：s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
// 输出：["AAAAACCCCC","CCCCCAAAAA"]
// 示例 2：
// 输入：s = "AAAAAAAAAAAAA"
// 输出：["AAAAAAAAAA"]
//   提示：
// 0 <= s.length <= 105
// s[i]=='A'、'C'、'G' or 'T'
// 通过次数
// 142.9K
// 提交次数
// 267.2K
// 通过率
// 53.5%
// https://leetcode.cn/problems/repeated-dna-sequences

/**
 * @param {string} s
 * @return {string[]}
 */
var findRepeatedDnaSequences = function (s) {
  const win = new Map()

  let [left, right] = [0, 0]
  while (right < s.length) {
    right++

    if (right - left === 10) {
      const curStr = s.slice(left++, right)
      win.set(curStr, (win.get(curStr) || 0) + 1)
    }
  }

  return Array.from(win.entries())
              .reduce((res, [s, n]) => ((n > 1 ? res.push(s) : undefined), res), [])
}

console.log(
  findRepeatedDnaSequences(
    'AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT'
  )
)
